package sicnu.cs.ich.common.services.impl;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import sicnu.cs.ich.api.common.enums.ConfigEnum;
import sicnu.cs.ich.common.mapper.ConfigMapper;
import sicnu.cs.ich.common.services.IConfigService;

import java.util.HashMap;

/**
 * @author CaiKe
 * @date 2021/11/8 18:13
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class ConfigServiceImpl implements IConfigService {

    private final ConfigMapper configMapper;

    @Override
    public String loadConfig(ConfigEnum config) {
        return configMapper.loadConfig(config);
    }

    @Override
    public HashMap<ConfigEnum, String> loadConfigs(ConfigEnum... enums) {
        return configMapper.loadConfigs(enums).stream()
                .reduce(new HashMap<>(enums.length), (o, n) -> {
                    o.putAll(n);
                    return o;
                });
    }

    /**
     * 保存热点数据相关信息
     *
     * @param config 配置Map
     */
    @Override
    public void storeConfigs(HashMap<ConfigEnum, String> config) {
        if (config.isEmpty()) {
            log.info("无新配置文件产生。");
            return;
        }
        configMapper.batchUpdateConfig(config);
//        config.forEach((k, v) -> {
//            if (v == null) {
//                throw new IllegalArgumentException("config中不能存在value为空的键值对：：" + k);
//            }
//        });
//        // 更新配置文件
//        config.forEach((k, v) -> {
//            configMapper.updateHitConfig(k.getKey(), v);
//        });
    }

    @Override
    public void storeConfig(ConfigEnum config, String value) {
        configMapper.updateConfig(config, value);
    }
}